package com.qf.controller;

import com.qf.pojo.Result;
import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authc.AuthenticationException;
import org.apache.shiro.authc.IncorrectCredentialsException;
import org.apache.shiro.authc.UnknownAccountException;
import org.apache.shiro.authc.UsernamePasswordToken;
import org.apache.shiro.crypto.hash.Md5Hash;
import org.apache.shiro.subject.Subject;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
public class LoginController {
    /**
     * 用户登录
     *
     * @param username   页面输入的用户名
     * @param password   页面输入的密码
     * @param rememberMe 页面勾选记住我
     * @return
     */
    @RequestMapping("/doLogin1")
    public String  doLogin(String username, String password, boolean rememberMe) {
        //1. 将页面输入的明文密码, 进行md5加密
        password = new Md5Hash(password, username, 1024).toString();
        System.out.println("====密码密文:=====" + password);

        //2. 将页面输入的用户名, 密码封装成Shiro需要的用户名密码对象
        UsernamePasswordToken token = new UsernamePasswordToken(username, password);

        //3. 判断是否需要记住我, 如果是, 那么设置记住我选项
        if (rememberMe) {
            token.setRememberMe(true);
        }

        //4. 获取Subject对象, 这个是Shiro框架的, 当前登录用户对象
        Subject subject = SecurityUtils.getSubject();


        try {
            //5. 调用当前登录对象的认证方法, 将用户名, 密码对象传入, 让shiro进行认证
            //当调用了这个login方法的时候, 那么shiro会自动执行自定义Realm类中的认证方法
            subject.login(token);

            //6. 捕获如果有异常那么返回给用户错误提示
        } catch (UnknownAccountException e) {
            return "/unauthorizedUrl.html";
        }catch (IncorrectCredentialsException e) {
            return "/unauthorizedUrl.html";

        } catch (AuthenticationException e) {
            return "/unauthorizedUrl.html";
        }

        //登录成功跳转到首页
        return "/index";


    }
}